#ifndef __COMMAND__
#define __COMMAND__
#include <grp.h>
#include <my_header.h>
#include <pwd.h>

// 命令返回的结构体
typedef struct commandResult_s {

  int ret;          // 命令函数的返回值
  char *result;     // 命令执行的结果
  char **result_ls; // ls命令返回的内容
  int ls_linenum;   // ls命令内容的行数

} commandResult_t;

/* typedef enum
{
                FIEE = 1,
                //DIR
} DATATYPE_TH7;

typedef struct datadeal_s
{
                DATATYPE_TH7 dt;
} dataDeal_t; */

// sqm------------->//

// 用来初始化commandResult结构体
int initCommandResult(commandResult_t *commandResult);

int command_ls(const char *root_dir, const char *current_dir,
               const char *dest_dir, commandResult_t *commandResult);
int command_pwd(const char *current_dir, commandResult_t *commandResult);
int command_mkdir(const char *root_dir, const char *current_dir,
                  const char *dest_dir, commandResult_t *commandResult);
int command_rmdir(const char *root_dir, const char *current_dir,
                  const char *dest_dir, commandResult_t *commandResult);

// 用来释放commandResult结构体的内存
int freeCommandResult(commandResult_t *commandResult);

// lyh------------->//

// 实现目录跳转
// root_dir是仓库的绝对路径,current_dir是用户的当前所在路径如:/lyh/cpp66/
// dest_dir 是跳转的路径
// commandresult是执行的结果
// result:表示提示字符，ret尚未定义,result_ls表示:处理需要返回数据结果,ls_linenum:表示指针数组的长度
int command_cd(const char *root_dir, const char *current_dir, char *dest_dir,
               commandResult_t *commandResult);

// 实现目录删除
// root_dir是仓库的绝对路径,current_dir是用户的当前所在路径如:/lyh/cpp66/
// dest_dir 是删除的目标文件或者目录
// commandresult是执行的结果
// result:表示提示字符，ret尚未定义,result_ls表示:处理需要返回数据结果,ls_linenum:表示指针数组的长度
int command_remove(const char *root_dir, const char *current_dir,
                   const char *dest_dir, commandResult_t *commandResult);

// 校验用户是否是系统用户，密码是明文
// 返回0表示正确，-1用户不存在，1密码错误
int command_verif(char username[], char passwd[]);

// 这两条指令接口没有定下来
int command_puts(const char *path, commandResult_t *commandResult);
int command_gets(const char *path, commandResult_t *commandResult);

// 释放result
void freeCommdResult(commandResult_t *comres);

#endif
